package com.bird.thread.base.stopthread;

/**
 * @author sijunqiang
 * @data 2021/6/26 10:38
 * @description: 带有sleep的中断线程的写法 {就是线程阻塞情况下进行--停止线程的操作}
 */
public class RightWayStopThreadWithSleep {

    private volatile int number;

    public static void main(String[] args) throws InterruptedException {
        Runnable runnable = () -> {
                int num = 0;
            try {
                while (num <= 300000000 && !Thread.currentThread().isInterrupted()) {
                    if (num % 100 == 0) {
                        System.out.println(num + " 是100的倍数");
                    }
                    num++;
                }
                String name = Thread.currentThread().getName();
                System.out.println("name: " + name);
                System.out.println("开始睡觉...😴😴😴😴😴😴");
                Thread.sleep(1000);// 模拟当线程阻塞的情况下 外部进行干预中断这个线程会出现什么问题 结果采取抛出异常的信息
                System.out.println("睡醒啦...😀😀😀😀😀😀");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        };
        // 通知 thread.start(). 通知JVM启动一个新的线程，来执行run方法里面的逻辑.


        Thread thread = new Thread(runnable); //构建线程类实例
        thread.start();// main线程，call 调用thread.start(); 先通知JVM启动一个新的线程
        Thread.sleep(50);// 让主线程阻塞50ms 然后在执行任务
        thread.interrupt();//中断线程

        Thread thread1 = new Thread();
        String name = thread1.getName();
        System.out.println("main = " + name);
    }

    // 这种方式 采取的是抛出异常的方式 进行中断线程
    // 当线程正在休眠的过程中 如果收到了中断的信号 它响应中断的信号比较特殊 采取的是抛出一个异常的形式 进行终止。
    //！总结： 如果试图想要 终止一个阻塞的子线程 那么这个阻塞的子线程会以抛出异常的形式 进行终止；

}
